PyVistaで ipygany を使う#

バージョン 0.38.0 で非推奨: このバックエンドは PyVista用Jupyterバックエンドをtrame化する - Python で動的なウェブアプリケーションを構築するための新しいフレームワークで,VTK の素晴らしいサポートがあるため,非推奨となりました.

ipygany jupyterlabプロットバックエンドは, pythreejs widget を介して threejs を活用した純粋なプロッティングを可能にする強力なモジュールです.(ここに示すように) HTMLドキュメントの埋め込み,( panel などの他のクライアントjupyterlabプロットモジュールと比較して) 高速プロッティングを可能にします.

ipygany: Jupyter into the third dimension には優れたブロックポストがあり,ここではあまり繰り返しませんが, ipygany には以下の特徴があります.

  • IsoColor:メッシュにカラーマッピングを適用します.

  • Warp: 3 D入力データを与えられたメッシュを変形します (例えばビームの変位データ)

  • WarpByScalar: 1 D入力データを使用してメッシュを変形します(例えば地形標高)

  • Threshold: 一定範囲のデータ内のメッシュパーツのみを表示します(例えば222 K≦温度≦240 K)

  • IsoSurface: メッシュがデータ値を尊重するサーフェスのみを表示します(例えば pressure == 3 bar)

  • PointCloudのようなグリフ効果

  • 水の可視化

PyVistaラッピング#

pyvista でipyganyを使用してプロットするには,2つの方法があります.1つは, ipyganyfrom_pyvista メソッドを使用してpyvistaメッシュ ipygany PolyMeshオブジェクト間で変換することで,さまざまな高度な ipygany メソッドを有効にし, ipygany Documentation で説明されている例に従うことです.もう1つは,既存の Plotter クラスを使用して jupyter_backend='ipygany' を設定する方法です.

おそらく最も良いのは,作成されたウィジェットをsphinxドキュメントに埋め込むことができることです.

import pyvista as pv
from pyvista import examples

mesh = examples.download_bunny()

pl = pv.Plotter()
pl.add_mesh(mesh, color='lightgrey')
pl.background_color = 'white'
pl.camera_position = 'xy'
pl.show(jupyter_backend='ipygany')

メッシュカラー,バックグラウンドカラー,カメラ位置がすべて ipygany シーンにマップされることに注意してください.つまり,既存のコードを再利用して,使用するプロットバックエンドのタイプに応じてバックエンドを変更できます.

すべてのvtkウィジェットを含む多くの機能が欠けていることに注意してください,しかし,これらの多くはjupyterlabウィジェットで置き換えることができます.独自のシーンをアセンブルする場合は,次のように "viewer" を返しながらjupyter_backendを変更します.

>>> pl = pv.Plotter()
>>> pl.add_mesh(mesh, color='lightgrey')
>>> pl.background_color = 'white'
>>> pl.camera_position = 'xy'
>>> scene = pl.show(jupyter_backend='ipygany', return_viewer=True)
>>> type(scene)
ipygany.ipygany.Scene

このシーンを任意の数のjupyterlabウィジェットに追加し,完全なウィジェットとして表示できます.例えば, ipywidgets.AppLayout を使用して2つを並べて表示することもできます.

例: 大規模モデル#

この例では,大きなメッシュを示し,500,000 万個の面と 250,000 個の点を含むCarburetorの例など非常に大きなメッシュでもすばやくロードできることを示します.このメッシュは約6 MBであるため,これは帯域幅に依存します.

import pyvista as pv
from pyvista import examples

pv.set_jupyter_backend('ipygany')

# download an example and reduce the mesh density
mesh = examples.download_carburator()
mesh.decimate(0.5, inplace=True)

# plot it on a white background with a lightgrey mesh color
mesh.plot(background='w', color='lightgrey')

シーンを戻します#

ipywidgets.TwoByTwoLayout を使っていくつかのウィジェットを同時に表示します.これは パラメトリックジオメトリオブジェクト に似ていますが,インタラクティブウィジェットがあります.

from ipywidgets import TwoByTwoLayout

import pyvista as pv


# consistent view options for all plotters
plot_kwargs = {'color': 'tan', 'jupyter_backend': 'ipygany',
               'return_viewer': True, 'background': 'white'}

supertoroid = pv.ParametricSuperToroid(n1=0.5)
scene_0 = supertoroid.plot(**plot_kwargs)

ellipsoid = pv.ParametricEllipsoid(10, 5, 5)
scene_1 = ellipsoid.plot(**plot_kwargs)

pseudosphere = pv.ParametricPseudosphere()
scene_2 = pseudosphere.plot(**plot_kwargs)

conicspiral = pv.ParametricConicSpiral()
scene_3 = conicspiral.plot(**plot_kwargs)

TwoByTwoLayout(top_left=scene_0,
               top_right=scene_1,
               bottom_left=scene_2,
               bottom_right=scene_3)

スカラーバー#

スカラーバーは,プロットにアクティブなスカラーがある場合に自動的に表示されます.たとえば, active_scalar_name のSt.Helens mesh'Elevation' です.スカラーバー,スカラーバータイトル,カラーマップドロップダウンメニューは自動的にシーンに追加されます.

# Load St Helens DEM and warp the topography
mesh = examples.download_st_helens().warp_by_scalar()

pl = pv.Plotter()
pl.background_color = 'white'
pl.add_mesh(mesh)
pl.show()